package uoc.tds.pec3.servidor.bd;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import uoc.tds.pec3.comun.beans.Usuario;

import uoc.tds.pec3.comun.excepciones.ExcepcionGestorIncidencias;
import uoc.tds.pec3.comun.excepciones.ExcepcionRemota;

import uoc.tds.pec3.comun.utilidades.MensajesI18N;

/**
 * Gestiona la persistencia de los datos de los usuarios
 */
public class GestorUsuario {
	
	/**
	 * Constructor de la clase GestorUsuario
	 */
	public GestorUsuario(){
		super();
	}
	
	/**
	 * Obtiene la lista de usuarios almacenados en la base de datos
	 * @return Lista de usuarios existentes
	 * @throws ExcepcionRemota
	 * @throws ExcepcionGestorIncidencias 
	 */
	public List<Usuario> buscaUsuarios() throws ExcepcionRemota, ExcepcionGestorIncidencias{
		
		List<Usuario> usuarios = new ArrayList<Usuario>();
		try{
			Statement sentencia = GestorBBDD.creaSentencia();
			String consulta = "SELECT * FROM "+GestorBBDD.getSchema()+".tb_user order by user_name";
			ResultSet rs = sentencia.executeQuery(consulta);
			
			while(rs.next()){
				Usuario usuario = new Usuario();
				usuario.setId(rs.getInt("user_id"));
				usuario.setUsername(rs.getString("user_name"));
				usuario.setCreationdate(rs.getDate("creation_date"));
				
				usuarios.add(usuario);
			}
			sentencia.close();
			
			return usuarios;
		}catch(SQLException sqle){
			throw new ExcepcionRemota(MensajesI18N.getMensajeI18N("error.beanUsuario.sentencia"),
					"(SQLException)" + sqle.getMessage());
		}catch(Exception e){
			throw new ExcepcionGestorIncidencias(MensajesI18N.getMensajeI18N("error.beanUsuario.add"),
					"(Exception)" + e.getMessage());
		}
	}

}
